const PI = 3.14;
function circle(r) {
  return PI * r * r;
}
console.log(circle(2));

//逆序
const str = "I love Bluemsun";
const newStr = str.split("").reverse().join("");
console.log(newStr);

//编程解析题1
function fn1() {
  for (var i = 0; i < 4; i++) {
    var tc = setTimeout(
      function (i) {
        console.log(i);
        clearTimeout(tc);
      },
      1000,
      i
    );
  }
}
fn1();
//i从0到4递增时依次将定时器放到任务队列执行任务，
//由于传递参数i，所以打印i=0,i=1,i=2的值。
//但是，由于var tc在作用域在函数内，并且没有传递该参数值，所以最终tc被反复赋值，最终id号对应的就是最后一个定时器，该定时器被反复清除，所以不能打印i=3的值

//编程解析题2
function fn1() {
  for (var i = 0; i < 4; i++) {
    var tc = setInterval(
      function (i, tc) {
        console.log(i);
        console.log(tc);
        clearInterval(tc);
      },
      10000,
      i,
      tc
    );
  }
}
fn1();
//fn1()调用函数，先执行完主线程任务再执行任务队列中的任务，setInterval为定时器，这里10毫秒执行一次。
//定时器执行后，才返回值给tc。当i=0时，由于之前传递了i的值，控制台打印i=0的值，变量tc未被赋值和声明，所以clearInterval(tc)，tc里面的值是undefined，该定时器未被清除。然后tc被赋值该定时器的编号
//控制台打印i=1的值，清除上个ID=1定时器。
//控制台打印i=2的值，清除上个ID=2定时器。
//控制台打印i=3的值，清除上个ID=3定时器,而此时自己这个定时器ID=4,由于循环到i=3就结束了，所以该定时器未被清除，将每隔10毫秒控制台打印3
//中，tc变量声明但未被定义，所以值为undefined;由于下面括号中传递了参数i和tc的值，所以0被传入
